package Servlet.User;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Creche.Admin.Administrateur;
import Creche.Bd.BD;
import Creche.Donnees.Actualite;
import Creche.Donnees.Donnee;
import Creche.Donnees.Modification;
import Creche.Main.Creche;

/*
 * Modification des donn�es d'une cr�che, on modifiera seulement les donn�es
 * + ajout actualit� et on enregistrera la modification dans la base de donn�e
 */
@SuppressWarnings("serial")
public class Valider extends HttpServlet {
	
	private BD myBase;
	
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
		Creche aMod = (Creche) req.getSession().getAttribute("creche");
		myBase = new BD();
		if (aMod!=null){
			valideCreche(aMod, req);
	        //redirection vers la page de modif
	        resp.sendRedirect("modifCreche.jsp?nom="+aMod.getNom()+"&ville="+aMod.getAdresse().getVille());
		} else if(req.getParameter("nomC") != null){// cas o� l'on vient d'accueil admin pour valider
													// une donn�e ou une actus
			String nomC = req.getParameter("nomC");

			aMod = myBase.getCreche(nomC);
			valideCreche(aMod, req);
	        resp.sendRedirect("accueilAdmin.jsp");	

		} else {
	        resp.sendRedirect("search.jsp");	
		}
	}
	
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
		Creche aMod = (Creche) req.getSession().getAttribute("creche");
		myBase = new BD();
		if (aMod!=null){
			valideCreche(aMod, req);
	        //redirection vers la page de modif
	        resp.sendRedirect("modifCreche.jsp?nom="+aMod.getNom()+"&ville="+aMod.getAdresse().getVille());
		} else if(req.getParameter("nomC") != null){// cas o� l'on vient d'accueil admin pour valider
													// une donn�e ou une actus
			String nomC = req.getParameter("nomC");

			aMod = myBase.getCreche(nomC);
			valideCreche(aMod, req);
	        resp.sendRedirect("accueilAdmin.jsp");	

		} else {
	        resp.sendRedirect("search.jsp");	
		}
	}
	/**
	 * Modification des donn�es d'une Creche, pour chaque modif si l'utilisateur
	 * n'est pas admin, on enregistrera une Modification et s'il est un admin 
	 * on validera la donn�e au passage
	 * @param aMod, Creche � modifier
	 * @param req, HttpServletRequest pour r�cup�rer les param�tres
	 */
	public void valideCreche(Creche aMod, HttpServletRequest req) {
		// nombre de donn�es de la cr�che � modifier en comptant la suppression
		int nbDonnees = aMod.getActu().size() + aMod.getSeulementDonnees().size();
		Administrateur admin = (Administrateur)req.getSession().getAttribute("session");
		Modification modif;
		ArrayList<String> labelNonValide;
		ArrayList<Donnee> donnees = aMod.getSeulementDonnees();
		ArrayList<Actualite> actus = aMod.getActu();
		//en fonction des valeurs des donn�es pass�es en param�tre
		// si une valeur est nulle on supprimera la donn�e de la cr�che
        for (int i = 0; i < donnees.size(); i++) {
        	if (req.getParameter(donnees.get(i).getLabel()) != null && req.getParameter(donnees.get(i).getLabel()).length() == 0){
        		nbDonnees = aMod.getActu().size() + aMod.getSeulementDonnees().size() - 1;
        		aMod.suppDonnee(donnees.get(i).getLabel());
        		i--;
        		donnees = aMod.getSeulementDonnees();
        	} else if (req.getParameter(donnees.get(i).getLabel()) != null){
        		donnees.get(i).setVal( req.getParameter(donnees.get(i).getLabel()));
        		// si un admin est connecter on valide la donn�e
        		if (admin != null &&  (admin.getVille().equals(aMod.getAdresse().getVille()) || 
						admin.getVille().equals("super"))) {
        			donnees.get(i).devientValide();
        		} 
        	}
        }

        // on va supprimer une actualite si l'utilisateur � cliquer sur le bouton 
        // supprimer � cot� du label
        if (req.getParameter("nomActu") != null ) {
        	if (req.getParameter("Valider") != null) {
        		for(int i = 0; i < actus.size(); i++) {
        			if (actus.get(i).getLabel().equals(req.getParameter("nomActu"))) {
        				actus.get(i).devientValide();
        			}
        		}
        	} else if (req.getParameter("Supprimer") != null) {
	    		nbDonnees = aMod.getActu().size() + aMod.getSeulementDonnees().size() - 1;
		        aMod.suppActu(req.getParameter("nomActu"));
        	}
        }
        // on va cr�er la modif qui en fait contiendra tout les labels de donn�es non valides
     	labelNonValide = aMod.getDonneesNonValide();
     	if(labelNonValide.size() == 0) {
     		myBase.removeModif(aMod.getAdresse().getVille() + ":" + aMod.getNom());
     	} else {
     		modif = new Modification(aMod.getAdresse().getVille() + ":" + aMod.getNom(), 
     						labelNonValide);
     		myBase.estPersistent(modif);
     	}
        myBase.estPersistent(aMod);
        do {
    		aMod = myBase.getCreche(aMod.getAdresse().getVille() + ":" +aMod.getNom());
    	} while(aMod.getActu().size() + aMod.getSeulementDonnees().size() != nbDonnees ); 

	}
	
	
}
